/**
 * 给定一个数组，求最长子序列使得异或和不为0
 * 贪心即可
 * 将所有元素异或，如果不为0，则答案就是N
 * 否则找一个非零数出来，答案就是N-1
 * 全零答案就是0
 * 
 * 原来的提交是错误的，找的是最长子段，但也通过了数据
 */
class Solution {

public:
    int longestSubsequence(vector<int>& nums) {
        int yihuo = 0;
        for(auto i : nums) yihuo ^= i;
        if(yihuo) return nums.size();

        int n = nums.size();
        int k = 0;
        while(k < n and nums[k] == 0) ++k;
        if(k == n) return 0;

        return n - 1;
    }
};